﻿using System;

namespace BF
{
    public interface IRecycleable
    {
        /// <summary>
        /// 对象是否已被回收
        /// </summary>
        bool isRecycled { get; set; }
        /// <summary>
        /// 是否是第一次从对象池中取出
        /// </summary>
        bool isFirstShow { get; set; }
        /// <summary>
        /// 对象回收到池中的时间
        /// </summary>
        float recycleTime { get; set; }
        /// <summary>
        /// 对象池
        /// </summary>
        IPool pool { get; set; }


        /// <summary>
        /// 第一次从对象池中取出的回调，Pop()之后调用
        /// </summary>
        void OnFirstShow();
        /// <summary>
        /// 每次从对象池中取出的回调，Pop()之后调用
        /// </summary>
        void OnShow();
        /// <summary>
        /// 每次回收到对象池的回调，ReturnToPool()之后调用
        /// </summary>
        void OnRecycle();

        /// <summary>
        /// 添加对象回收时的回调，调用完后会置空。
        /// </summary>
        void OnRecycle(Action callback);

        void ReturnToPool();

        void Destroy();
    }
}